/**
 * 验证工具函数集合
 * 提供常用的表单验证规则
 */

/**
 * 检查是否为空
 * @param {string} value - 输入值
 * @returns {boolean} 如果为空返回true
 */
export function isEmpty(value) {
    return !value || value.trim() === '';
  }
  
  /**
   * 验证邮箱格式
   * @param {string} email - 邮箱地址
   * @returns {boolean} 验证通过返回true
   */
  export function validateEmail(email) {
    const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(String(email).toLowerCase());
  }
  
  /**
   * 验证手机号码（中国大陆）
   * @param {string} phone - 手机号码
   * @returns {boolean} 验证通过返回true
   */
  export function validatePhone(phone) {
    const re = /^1[3-9]\d{9}$/;
    return re.test(phone);
  }
  
  /**
   * 验证身份证号码（中国大陆）
   * @param {string} idCard - 身份证号码
   * @returns {boolean} 验证通过返回true
   */
  export function validateIdCard(idCard) {
    const re = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$/;
    if (!re.test(idCard)) return false;
    
    // 校验码验证
    const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
    
    let sum = 0;
    for (let i = 0; i < 17; i++) {
      sum += parseInt(idCard[i]) * weights[i];
    }
    
    const mod = sum % 11;
    return idCard[17].toUpperCase() === checkCodes[mod];
  }
  
  /**
   * 验证URL格式
   * @param {string} url - URL地址
   * @returns {boolean} 验证通过返回true
  */
  export function validateUrl(url) {
    // 修复后的正则表达式 - 移除了不必要的转义字符
    const re = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
    return re.test(url);
}
  
  /**
   * 验证密码强度（至少8位，包含字母和数字）
   * @param {string} password - 密码
   * @returns {boolean} 验证通过返回true
   */
  export function validatePassword(password) {
    return password.length >= 8 && /\d/.test(password) && /[a-zA-Z]/.test(password);
  }
  
  /**
   * 验证数字范围
   * @param {number} num - 数字
   * @param {number} min - 最小值
   * @param {number} max - 最大值
   * @returns {boolean} 在范围内返回true
   */
  export function validateNumberRange(num, min, max) {
    return num >= min && num <= max;
  }
  
  /**
   * 验证日期格式（YYYY-MM-DD）
   * @param {string} dateStr - 日期字符串
   * @returns {boolean} 验证通过返回true
   */
  export function validateDate(dateStr) {
    const re = /^\d{4}-\d{2}-\d{2}$/;
    if (!re.test(dateStr)) return false;
    
    const date = new Date(dateStr);
    return !isNaN(date.getTime());
  }
  
  /**
   * 验证时间格式（HH:mm）
   * @param {string} timeStr - 时间字符串
   * @returns {boolean} 验证通过返回true
   */
  export function validateTime(timeStr) {
    const re = /^([01]\d|2[0-3]):([0-5]\d)$/;
    return re.test(timeStr);
  }
  
  /**
   * 验证是否包含中文
   * @param {string} str - 字符串
   * @returns {boolean} 包含中文返回true
   */
  export function containsChinese(str) {
    return /[\u4e00-\u9fa5]/.test(str);
  }
  
  /**
   * 验证是否为纯数字
   * @param {string} str - 字符串
   * @returns {boolean} 纯数字返回true
   */
  export function isNumeric(str) {
    return /^\d+$/.test(str);
  }
  
  /**
   * 验证金额（最多两位小数）
   * @param {string} amount - 金额字符串
   * @returns {boolean} 验证通过返回true
   */
  export function validateAmount(amount) {
    return /^\d+(\.\d{1,2})?$/.test(amount);
  }
  
  /**
   * 验证车牌号（中国大陆）
   * @param {string} plate - 车牌号
   * @returns {boolean} 验证通过返回true
   */
  export function validateLicensePlate(plate) {
    const re = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/;
    return re.test(plate);
  }
  
  // 默认导出所有函数
  export default {
    isEmpty,
    validateEmail,
    validatePhone,
    validateIdCard,
    validateUrl,
    validatePassword,
    validateNumberRange,
    validateDate,
    validateTime,
    containsChinese,
    isNumeric,
    validateAmount,
    validateLicensePlate
  };